home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_CriticalSingle.h < prev    next >
C/C++ Source or Header  |  2000-04-06  |  5KB  |  159 lines

  1. #ifndef CB_CRITICAL_SINGLE_H
  2. #define CB_CRITICAL_SINGLE_H
  3.  
  4. #include <assert.h>
  5.  
  6. #include "CB_CriticalSection.h"
  7. #include "CB_Single.h"
  8.  
  9. // defines for include files
  10. #define RELATION_TEMPLATE_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  11. public:\
  12.     ClassTo* _ref##NameTo;\
  13. \
  14.     static CriticalSection& CriticalSection##NameTo()\
  15.     {\
  16.         static CriticalSection criticalSection##NameTo;\
  17.         return criticalSection##NameTo;\
  18.     }\
  19.     \
  20. public:\
  21.     void Add##NameTo(ClassTo* item)\
  22.     {\
  23.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  24.         METHOD_SINGLE_ADD(ClassFrom, NameFrom, ClassTo, NameTo) \
  25.     }\
  26.     \
  27.     void Remove##NameTo(ClassTo* item)\
  28.     {\
  29.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  30.         METHOD_SINGLE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  31.     }\
  32.     \
  33.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  34.     {\
  35.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  36.         METHOD_SINGLE_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  37.     }\
  38.     void Move##NameTo(ClassTo* item)\
  39.     {\
  40.         CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  41.         METHOD_SINGLE_MOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  42.     }\
  43.     \
  44.     ClassTo* Get##NameTo() const {return _ref##NameTo;};
  45.  
  46. #define RELATION_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  47. public:\
  48.     ClassTo* _ref##NameTo;\
  49. \
  50.     static CriticalSection _criticalSection##NameTo;\
  51.     static CriticalSection& CriticalSection##NameTo() { return _criticalSection##NameTo; }\
  52. \
  53. public:\
  54.     void Add##NameTo(ClassTo* item);\
  55.     void Remove##NameTo(ClassTo* item);\
  56.     void Move##NameTo(ClassTo* item);\
  57.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  58.     ClassTo* Get##NameTo() const { return _ref##NameTo; };
  59.  
  60.  
  61. #define RELATION_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  62. public:\
  63.     ClassFrom* _ref##NameFrom;\
  64. \
  65. public:\
  66.     ClassFrom* Get##NameFrom() const { return _ref##NameFrom; };
  67.  
  68. // defines implementation
  69.  
  70. #define INIT_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  71.     INIT_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  72.  
  73. #define EXIT_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  74. {\
  75.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  76.     EXIT_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  77. }
  78.  
  79. #define REPLACE_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  80. {\
  81.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  82.     REPLACE_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  83. }
  84.  
  85. #define INIT_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  86.     INIT_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) 
  87.  
  88. #define EXIT_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  89. {\
  90.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  91.     EXIT_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  92. }
  93.  
  94. #define REPLACE_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  95. {\
  96.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  97.     REPLACE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  98. }
  99.  
  100. #define REMOVE_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  101. {\
  102.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  103.     REMOVE_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  104. }
  105.  
  106. #define SAVE_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  107. {\
  108.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  109.     SAVE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  110. }
  111.  
  112. #define RESTORE_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  113. {\
  114.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  115.     RESTORE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  116. }
  117.  
  118. #define REMOVE_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  119. {\
  120.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  121.     REMOVE_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  122. }
  123.  
  124. #define CLEANUP_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  125. {\
  126.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  127.     CLEANUP_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  128. }
  129.  
  130. #define METHODS_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  131.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  132. void ClassFrom##::Add##NameTo(ClassTo* item)\
  133. {\
  134.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  135.     METHOD_SINGLE_ADD(ClassFrom, NameFrom, ClassTo, NameTo) \
  136. }\
  137. \
  138. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  139. {\
  140.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  141.     METHOD_SINGLE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  142. }\
  143. \
  144. void ClassFrom##::Move##NameTo(ClassTo* item)\
  145. {\
  146.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  147.     METHOD_SINGLE_MOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  148. }\
  149. \
  150. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  151. {\
  152.     CriticalSectionLock lock(ClassFrom::CriticalSection##NameTo());\
  153.     METHOD_SINGLE_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  154. }
  155.  
  156.  
  157. #define METHODS_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  158.  
  159. #endif